#include <stdio.h>
#define MaxSize 100
typedef  int DataType;

typedef struct {
    DataType  list[MaxSize];
    int size;
}SeqList;

/*初始化顺序表*/
void ListInitiate(SeqList *L)
{
    L->size = 0; /*定义初始元素个数*/
}

/*返回顺序表L的当前数据元素个数*/
int ListLength(SeqList L)
{
    return L.size;
}

int ListInsert(SeqList *L , int i, DataType x )
/*在顺序表L的位置i（0 <= i <= size ） 前插入数据元素值x */
{
    int j ;
    if ( L -> size >= MaxSize)
    {
        printf("顺序表已满无法插入！ \n");
        return 0;
    }
    else if ( i < 0 || i > L->size)
    {
        printf("参数i不合法 ！ \n");
        return 0;
    }
    else
    {
        //此程序有错误
        for(j = L->size ; j>i-1 ; j--)
            /*为插入做准备*/
            L -> list[j+1] = L -> list[j];
        /*插入*/
        L -> list[i] = x;
        /*元素个数加1*/
        L -> size ++;
        return 1;
    }
}

int ListDelete (SeqList *L , int i , DataType *x)
/*删除顺序表L中位置i（0 <= i <= size - 1）的数据元素值并存放到参数x中*/
/*删除成功返回1， 删除失败返回0*/
{
    int j ;
    if ( L -> size <= 0 )
    {
        printf("顺序表已空无数据可删除！ \n");
        return 0;
    }
    else if ( i < 0 || i > L-> size-1)
    {
        printf("参数i不合法");
        return 0;
    }
    else
    {
//        此段程序有错误
        /*保存删除的元素到参数x中*/
        *x = L-> list[i];
        for ( j = i + 1; j <= L ->size - 1  ; j++) /*依次前移*/
            L -> list[j-1] = L->list[j];
        L-> size--;/*数据元素个数减1*/
        return 1;
    }
}

int ListGet(SeqList L , int i , DataType *x)
/*取顺序表L中第i个元素的值存于x中，成功则返回1，失败则返回0*/
{
    if(i < 0 || i > L.size-1 )
    {
        printf("参数i不合法！ \n");
        return 0;
    }
    else
    {
        *x = L.list[i];
        return 1;
    }
}

//有错误：实现函数体，实现在L内查找x；
//当x存在L中时,返回x所在的索引的最小值;
// 当x不存在L中时，返回-1 ；
int ListSearch(SeqList L , DataType x ){
    for (int i = 0; i < L.size; ++i) {
        if(L.list[i]==x)
            return i;
    }
    return -1;

}


int main(int argc,char * argv[])
{
    SeqList mylist;
    int i , x;
    ListInitiate(&mylist);
    for (i = 0 ; i < 10 ; i++)
        ListInsert(&mylist , i , i+1);
    ListDelete(&mylist, 4 ,&x);

    for (i = 0 ; i < ListLength(mylist); i++)
    {
        //此段程序有一处错误
        ListGet(mylist, i , &x );
        printf("%d ", x );
    }
    printf("\n%d", ListSearch(mylist,9));
    printf("\n%d", ListSearch(mylist,11));
    ListInsert(&mylist,3,12);
    for (int i = 0; i < ListLength(mylist);i++) {
        ListGet(mylist,i,&x);
        printf("%d",x);
    }
    return 0;
}
void main(){
    printf("hello word");
}
